package com.czx.drivingtest.dao;

import com.czx.drivingtest.model.dto.ExamResult;
import com.czx.drivingtest.model.entity.Statistics;
import com.czx.drivingtest.model.entity.UserArchive;
import com.czx.drivingtest.model.entity.UserQuestion;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户与题目关联表的dao
 *
 * @author czx
 * @version 2021/1/29 9:24 下午
 */
public interface UserQuestionDao {

    /**
     * 添加一个用户存档记录
     * @param userArchive
     * @return
     */
    int insertUserArchive(UserArchive userArchive);

    /**
     * 查询用户的答题情况
     * @param userId
     * @param subject 科目
     * @return
     */
    UserArchive queryUserArchive(@Param("userId") long userId,@Param("subject") Integer subject);

    /**
     * 修改用户答题情况
     * @param userArchive
     * @return
     */
    int updateUserArchive(UserArchive userArchive);

    /**
     * 查询用户最后一次回答的题目id
     * @param userId
     * @param subject 科目
     * @return
     */
    Integer queryLastQuestionId(@Param("userId") long userId,@Param("subject") Integer subject);

    /**
     * 查询用户与题目的关联
     * @param userId
     * @param questionId
     * @return
     */
    UserQuestion query(@Param("userId") long userId, @Param("questionId") Integer questionId);

    /**
     * 查询某一个用户的答题
     * @param userId
     * @param subject
     * @return
     */
    List<UserQuestion> queryByUserId(@Param("userId") long userId,@Param("subject") Integer subject);

    /**
     * 添加一个用户与题目的关联
     * @param userQuestion
     * @return
     */
    int insert(UserQuestion userQuestion);

    /**
     * 更新用户做题的对错
     * @param userQuestion
     * @return
     */
    int updateStatus(UserQuestion userQuestion);

    /**
     * 查询用户的错题
     * @param userId
     * @param subject
     * @return
     */
    List<UserQuestion> queryWrongByUserId(@Param("userId") long userId,@Param("subject") Integer subject);

    /**
     * 插入一条考试成绩
     * @param examResult
     */
    void insertExamResult(ExamResult examResult);

    /**
     * 获取用户的考试统计
     * @param userId
     * @param subject
     * @return
     */
    Statistics queryStatistics(@Param("userId") long userId, @Param("subject") int subject);

    /**
     * 查询答题数量
     * @param userId
     * @param subject
     * @return
     */
    int queryAnswerCount(@Param("userId") long userId, @Param("subject") int subject);
}
